package chwgigs.swing.outline;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.List;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

// 고급 컴퍼넌트 (많은 데이터 표시)
// JList     :몇 가지 데이터 목록을 나란히 표시하고 한가지 선택하게 함 
// JComboBox : 일명 dropdownlist 라고 한다 
//            평소에는 전체 목록을 숨기고 있다가 클릭하면 전체 목록이 나타난다.
//            최종적으로 선택한 항목이 화면에 표시된다.

// JTable  : 엑셀처럼 대량의 데이터들을 표 형태로 나타낸다. 

public class J21_AdvancedComponent extends JFrame {

	private JPanel contentPane;
	private JTable table;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					J21_AdvancedComponent frame = new J21_AdvancedComponent();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public J21_AdvancedComponent() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.NORTH);
		String[] datalist = { "채희원", "채희자", "채희윤", "채희각", "채희순", "채희라", "채희놈",
				"채희웅" };
		// list.setPreferredSize(new Dimension(120,50));

		JButton btn1 = new JButton("New button");
		btn1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int idx = list.getSelectedIndex();
				String val = List.getSelectedValue();
				String msg = idx + "/" + val;
				JOptionPane.showConfirmDialog(null, msg);

			}
		});

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setPreferredSize(new Dimension(125, 55));
		panel.add(scrollPane);
		scrollPane
				.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane
				.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

		final JList<String> list = new JList<>();
		scrollPane.setViewportView(list);
		list.setPreferredSize(new Dimension(125, 50));
		list.setListData(datalist);
		panel.add(btn1);

		JPanel panel_1 = new JPanel();
		contentPane.add(panel_1, BorderLayout.CENTER);
		String[] tbtitle = { "번호", "이름 ", "국어", "영어", "수학" };
		String[][] tbdata = { { "1", "채희원", "100", "100", "100" },
				                   { "2", "채희순", "60", " 78", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" },
				                   { "3", "채희미 ", "70", "100", "100" }};
		// 제목/본문행을 DefaultTableModel 클래스에 등록
		DefaultTableModel tbmodel = new DefaultTableModel(tbdata, tbtitle);
		
				JScrollPane scrollPane_1 = new JScrollPane();
				scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
				scrollPane_1.setPreferredSize(new Dimension(300, 100));
				panel_1.add(scrollPane_1);
				
						// JTable 생성자에 DefaultTableModel 클래스 전달
						table = new JTable(tbmodel);
						scrollPane_1.setViewportView(table);

		JPanel panel_2 = new JPanel();
		contentPane.add(panel_2, BorderLayout.SOUTH);
		// 테이블의 제목행 생성
		// 테이블의 본문행 생성

		JComboBox<String> comboBox = new JComboBox(datalist);

		panel_2.add(comboBox);

		JButton btn2 = new JButton("New button");
		btn1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int idx = list.getSelectedIndex();
				String val = list.getSelectedValue();
				String msg = idx + "/" + val;
				JOptionPane.showConfirmDialog(null, msg);

			}
		});

		panel_2.add(btn2);
	}
}
